package com.ruoyi.web.functional;

import java.util.function.Function;

/**
 * @Program: RuoYi-Vue-chy->functionalDemo
 * @Description: functional函数表达式
 * @Author: hongyu.chen
 * @Date: 2025-03-08 15:26
 * @Version： 1.0
 **/
/*
    Function<T.R>:常用的两个方法
        R apply(Tt):将此函数应用于给定的参数
        default <V> function andThen(function after):返回一个组合函数，
            首先将该函数应用于输入，然后将after函数应用于结果Function<T,R>接口通常用于对参数进行处理，转换(处理逻辑由Lambda表达式实现)，然后返回一个新的值
 */
public class FunctionalDemo {
    public static void main(String[] args) {
        convert("50",(String s) ->{
            return Integer.parseInt(s);
        });

        convert("50",s -> Integer.parseInt(s));
        Integer i = convert("50",Integer::parseInt);

        String str = convert2(i,(inte) -> Integer.toString(inte + 1000));

        convert3("100",Integer::parseInt,(inte) -> Integer.toString(inte + 2000));
    }

    //定义一个方法，把一个字符串转换成int类型，在控制台输出
    private static int convert(String s, Function<String,Integer> f) {

        System.out.println("这里应该是最开始");
        Integer i = f.apply(s);
        System.out.println(i);
        return i;
    }
    //定义一个方法，把一个int类型加上一个整数，转换成字符串在控制台输出
    private static String convert2(Integer i, Function<Integer,String> f) {
        String s = f.apply(i);
        System.out.println("convert2 : " + s);
        return s;
    }
    //定义一个方法，把一个字符串转换int类型，把int类型的数据加上一个整数之后，转为字符串在控制台输出
    private static String convert3(String s, Function<String,Integer> f1,Function<Integer,String> f2) {
//        Integer i = f1.apply(s);
//        String str = f2.apply(i);
        String str = f1.andThen(f2).apply(s) ;
        System.out.println("convert3 : " + str);
        return str;
    }


}
